﻿/*!
 * 定义模块 Everyone (日历) 中所有功能的服务 API。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

/*
 * @param {Object} $    jQuery 命名空间。
 * @param {Object} $$   pittypat 命名空间。
 * @param {Object} _mod 模块 Everyone (日历) 的命名空间。
 * 
 * 更多说明请参见：
 * https://www.pittypat.work/com/waln/pittypat/coding/help/_api.js.html。
 */
(function ($, $$, _mod) {
    'use strict';

    // 模块的 API 和 UI 命名空间
    var _api = _mod.api = _mod.api || {};

	/*
	 * 功能 Dates (月份日期列表) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 年份
	 *     // 要返回的日期所在的年份。
	 *     year: {int16?},
	 * 
	 *     // 月份
	 *     // 要返回的日期所在的月份，从 1 到 12。
	 *     month: {int8?} 
	 * }
	 * 
	 * 输出(success.result):
	 * // 日期列表
	 * // 目标年份和月份中的所有日期的列表。该列表仅仅返回管理人员已经定义的日期，没有定义的日期不会出现在列表中。在一个日历界面上，除了会显示当前月份的日期外，通常还会显示上一个月的最后几天，以及下一个月的前面几天，因此返回的列表包含了上一个月、本月以及下一个月的所有已经定义的日期。
	 * list: [{
	 *     // 日期值
	 *     // 目标日期的值。
	 *     value: {date?},
	 * 
	 *     // 是否工作日
	 *     // 指示目标日期是否是一个工作日：true-是工作日，false-是节假日。
	 *     isWorkday: {bool?},
	 * 
	 *     // 节日名称
	 *     // 日期对应的节日的名称。
	 *     festivals: {string?} 
	 * }, ...]
	 */
    _api.dates = $$.api({
        // 请求路径
        url: '~/waln/calendar/everyone/dates',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            if (!e.args) {
                e.message = '没有提供任何参数。';
                return;
            }

            // 验证 year (年份)
            if (!$$.util.is.int(e.args.year, 1900, 9999)) {
                e.message = '没有提供有效的年份。';
                return;
            }

            // 验证 month (月份)
            if (!$$.util.is.int(e.args.month, 1, 12)) {
                e.message = '没有提供有效的月份。';
                return;
            }

            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = e.args;
        }
    });
})(jQuery, pittypat, pittypat.namespace('waln.calendar.everyone'));
